package org.luxor.commons.core.utils.smcrypto;

import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.symmetric.SymmetricCrypto;

/**
 * SM4国密算法类（对标AES-对称加、解密算法）
 *
 * @author Mr.yan  @date 2022/11/15
 */
public class Sm4Utils {
    /**
     * !!! 禁止随意修改，会影响历史账号的登录密码验证
     */
    public static String SM4_DATA_SECURITY_KEY = "jkl;POIU1234++==";

    /**
     * SM4对称加密
     *
     * @param plaintext 明文
     * @param key       钥匙
     * @return java.lang.String
     */
    public static String encrypt(String plaintext, String key) {
        SymmetricCrypto sm4 = SmUtil.sm4(key.getBytes());
        return sm4.encryptBase64(plaintext);
    }

    /**
     * SM4对称解密
     *
     * @param ciphertext 密文
     * @param key        钥匙
     * @return java.lang.String
     */
    public static String decrypt(String ciphertext, String key) {
        SymmetricCrypto sm4 = SmUtil.sm4(key.getBytes());
        return sm4.decryptStr(ciphertext);
    }

    /**
     * SM4加密
     *
     * @param str 需要加密的字符串
     * @return
     * @throws Exception
     */
    public static String encrypt(String str) {
        return encrypt(str, SM4_DATA_SECURITY_KEY);
    }

    /**
     * SM4解密
     *
     * @param str 需要解密的字符串
     * @return
     */
    public static String decrypt(String str) {
        return decrypt(str, SM4_DATA_SECURITY_KEY);
    }

}
